package br.ucb.cesbdao.modeloTabelas;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.swing.table.AbstractTableModel;

import org.apache.log4j.Logger;

import br.ucb.cesbdao.beans.Atendimento;
import br.ucb.cesbdao.enuns.EnumPreferencial;
import br.ucb.cesbdao.model.PessoaModel;
import br.ucb.cesbdao.model.TrabalhadorModel;
import br.ucb.cesbdao.model.impl.PessoaModelImpl;
import br.ucb.cesbdao.model.impl.TrabalhadorModelImpl;
import br.ucb.cesbdao.servicos.Servicos;

@SuppressWarnings("serial")
public class ModeloTabelaAtendimentoApoio extends AbstractTableModel{

	private List<Atendimento> atendimentos  = null;
	private String []colunas = new String[] {"Atendido","AFI", "Horário Marcação", "Horário Atendimento", "Horário Encerramento","Tipo","Senha"};
	private static HashMap<Integer,String> senha = new HashMap<Integer, String>();
	static Logger logger = Servicos.carregaLog(ModeloTabelaAtendimentoApoio.class);


	public ModeloTabelaAtendimentoApoio(){
		this.atendimentos = new ArrayList<Atendimento>();
	}

	public List<Atendimento> getAtendimento() {
		return atendimentos;
	}

	@SuppressWarnings({ "unchecked", "rawtypes", "static-access" })
	public void setAtendimento(ArrayList<Atendimento> atendimentos) {
		this.atendimentos = (List)atendimentos;
		DecimalFormat dc = new DecimalFormat("000");
		int n = 1,p = 1,e=1;
		for (Atendimento atendimento : atendimentos) {
			if(atendimento.getPrefencial() == 0)
				this.senha.put(atendimento.getIdAtendimento(),String.valueOf(dc.format(n++)));
			if(atendimento.getPrefencial() == 1 )
				this.senha.put(atendimento.getIdAtendimento(),String.valueOf(dc.format(p++)));
			if(atendimento.getPrefencial() == 2 )
				this.senha.put(atendimento.getIdAtendimento(),String.valueOf(dc.format(e++)));
			if(atendimento.getPrefencial() == 3 )
				this.senha.put(atendimento.getIdAtendimento(),String.valueOf(dc.format(e++)));
		}

	}
	
	public String[] getColunas(){
		return colunas;
	}

	public void setColunas(String[] colunas) {
		this.colunas = colunas;
	}

	@Override
	public String getColumnName(int col){
		return colunas[col];
	}

	public int getColumnCount() {
		return getColunas().length;
	}

	public int getRowCount() {
		return getAtendimento().size();
	}
	public Atendimento getAtendimentoAt(int row){
		return atendimentos.get(row);
	} 
	public String getSenha(){
		
		for (Atendimento atendimento : atendimentos) {
			if(atendimento.getHorarioEntrada() == null && atendimento.getHorarioSaida() == null && atendimento.getPrefencial() == 0)
				return senha.get(atendimento.getIdAtendimento());
		}
		return "000";
	}
	public String getSenhaP(){
		for (Atendimento atendimento : atendimentos) {
			if(atendimento.getHorarioEntrada() == null && atendimento.getHorarioSaida() == null && atendimento.getPrefencial() == 1)
				return senha.get(atendimento.getIdAtendimento());
		}
		return "000";
	}
	public String getSenhaE(){
		for (Atendimento atendimento : atendimentos) {
			if(atendimento.getHorarioEntrada() == null && atendimento.getHorarioSaida() == null && atendimento.getPrefencial() == 2)
				return senha.get(atendimento.getIdAtendimento());
		}
		return "000";
	}
	public String getSenhaEs(){
		for (Atendimento atendimento : atendimentos) {
			if(atendimento.getHorarioEntrada() == null && atendimento.getHorarioSaida() == null && atendimento.getPrefencial() == 3)
				return senha.get(atendimento.getIdAtendimento());
		}
		return "000";
	}
	public Object getValueAt(int rowIndex, int columnIndex) {
		Atendimento atendimento = (Atendimento)atendimentos.get(rowIndex);
		PessoaModel pessoaModel = new PessoaModelImpl();
		TrabalhadorModel trabModel = new TrabalhadorModelImpl();
		switch(columnIndex){
		case 0:
			return pessoaModel.consultaPessoaById(atendimento.getChavePessoa()).getNome();
		case 1:
			if(trabModel.consultaTrabalhadorByCpf(atendimento.getCpf()) == null)
				return "";
			else{
				return trabModel.consultaTrabalhadorByCpf(atendimento.getCpf()).getNome();
			}
		case 2:
			if(atendimento.getHorarioChegada() == null)
				return "";
			else
				return atendimento.getHorarioChegada();
		case 3:
			if(atendimento.getHorarioEntrada() == null)
				return "";
			else
				return atendimento.getHorarioEntrada();

		case 4:
			if(atendimento.getHorarioSaida() == null)
				return "";
			else
				return atendimento.getHorarioSaida();
		case 5:
			return EnumPreferencial.getPreferenciaById(atendimento.getPrefencial());
		case 6:
			return senha.get(atendimento.getIdAtendimento());

		}
		return null;
	}
}
